স্ট্রিম অবজেক্ট লিখুন
একটি WriteStream হল একটি স্ট্রিম যা আপনাকে একটি গন্তব্যে ডেটা লিখতে দেয়। Node.js বিভিন্ন অ্যাপ্লিকেশনের উদ্দেশ্যে WriteStream বাস্তবায়ন প্রদান করে, যেমন ফাইলে লেখা (fs.WriteStream) বা স্ট্যান্ডার্ড আউটপুট (process.stdout)।
WriteStreams stream.Writable ইন্টারফেস বাস্তবায়ন করে, যার অর্থ তারা অ্যাসিঙ্ক্রোনাসভাবে ডেটা লিখতে এবং ব্যাকপ্রেশার পরিচালনা করার জন্য পদ্ধতি এবং ঘটনা সরবরাহ করে।
fs.WriteStream
ফাইল লেখার জন্য
process.stdout
স্ট্যান্ডার্ড আউটপুটে লিখতে
net.Socket
নেটওয়ার্ক সংযোগে লেখার জন্য
সাধারণ WriteStream প্রকার
| টাইপ | ব্যাখ্যা |
|---|---|
| fs.WriteStream | ফাইল লেখার জন্য |
| process.stdout process.stderr | স্ট্যান্ডার্ড আউটপুট এবং ত্রুটি লেখার জন্য |
| net.Socket | নেটওয়ার্ক সংযোগে লেখার জন্য |
| http.ServerResponse | HTTP প্রতিক্রিয়া লেখার জন্য |
স্ট্রিম বৈশিষ্ট্য লিখুন
Node.js WriteStream , fs.WriteStream :
| বৈশিষ্ট্য | ব্যাখ্যা |
|---|---|
| writeStream.bytesWritten | এ পর্যন্ত লেখা বাইটের সংখ্যা |
| writeStream.path | ফাইল পাথ যেখানে এই WriteStream লিখছে (শুধুমাত্র fs.WriteStream)। |
| writeStream.pending | সত্য হলে, অন্তর্নিহিত ফাইলটি এখনও খোলা হয়নি |
| writeStream.writableHighWaterMark | এই WriteStream-এর জন্য highWaterMark মান প্রদান করে |
| writeStream.writableLength | লেখার জন্য প্রস্তুত লেখার সারিতে বাইটের সংখ্যা (বা বস্তু) প্রদান করে |
| writeStream.writableEnded | end() ডাকার পর true রিটার্ন করে |
| writeStream.writableFinished | 'ফিনিশ' ইভেন্টটি বরখাস্ত হওয়ার পরে সত্য ফিরে আসে |
| writeStream.writableObjectMode | WriteStream অবজেক্ট মোডে আছে কিনা তা নির্দেশ করে |
| writeStream.destroyed | স্ট্রীম ধ্বংস হয়েছে কিনা নির্দেশ করে |
স্ট্রিম পদ্ধতি লিখুন
এখানে WriteStream অবজেক্টে উপলব্ধ সবচেয়ে গুরুত্বপূর্ণ পদ্ধতি রয়েছে:
| পদ্ধতি | ব্যাখ্যা |
|---|---|
| writeStream.write(chunk[, encoding][, callback]) | স্রোতে খণ্ড লেখে। ডেটা সম্পূর্ণরূপে প্রক্রিয়া করা হলে সত্য বা বাফার করা হলে মিথ্যা দেখায়। যখন খণ্ডটি ফ্লাশ করা হয় তখন কলব্যাক বলা হয় |
| writeStream.end([chunk][, encoding][, callback]) | নির্দেশ করে যে ডাটা আর রাইটস্ট্রিমে লেখা হবে না। যদি একটি খণ্ড প্রদান করা হয়, তাহলে এটি writeStream.write(খণ্ড, এনকোডিং) এর পরে writeStream.end(কলব্যাক) এর সমতুল্য। |
| writeStream.cork() | সমস্ত লিখিত ডেটা মেমরিতে বাফার করতে বাধ্য করে, যা uncork() বা end() বলা হলে ফ্লাশ করা হবে |
| writeStream.uncork() | কর্ক() কল করার পর থেকে সমস্ত বাফার করা ডেটা ফ্লাশ করে |
| writeStream.destroy([error]) | স্ট্রীম সাফ করে, এবং ঐচ্ছিকভাবে একটি ত্রুটি ইভেন্ট নির্গত করে। এই কলের পরে, WriteStream ব্যবহার করা যাবে না |
| writeStream.setDefaultEncoding(encoding) | স্ট্রিমে লেখা স্ট্রিংয়ের জন্য ডিফল্ট এনকোডিং সেট করে |
স্ট্রিম ইভেন্টগুলি লিখুন
WriteStream অবজেক্টগুলি নিম্নলিখিত ইভেন্টগুলি নির্গত করে:
| ঘটনা | ব্যাখ্যা |
|---|---|
| 'close' | স্ট্রীম এবং এর যেকোন অন্তর্নিহিত সংস্থান বন্ধ হয়ে গেলে মুক্তি পায় |
| 'drain' | নির্গত হয় যখন লেখার বাফার খালি থাকে এবং আবার লিখতে নিরাপদ থাকে। এটি প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহৃত হয় যখন write() মিথ্যা ফেরত দেয় |
| 'error' | লেখার সময় একটি ত্রুটি ঘটলে ইস্যু করা হয় |
| 'finish' | শেষের পরে নির্গত () কল করা হয়েছে এবং সমস্ত ডেটা প্রক্রিয়া করা হয়েছে |
| 'open' | যখন অন্তর্নিহিত সম্পদ (যেমন, ফাইল বর্ণনাকারী) খোলা হয় তখন প্রকাশিত হয় (fs.WriteStream-এর জন্য নির্দিষ্ট) |
| 'pipe' | একটি রিডস্ট্রিমে কল করার সময় পাইপ() পদ্ধতিটি নির্গত হয়, এই WriteStreamটিকে লক্ষ্য হিসাবে যুক্ত করে |
| 'unpipe' | একটি রিডস্ট্রীমে কল করার সময় unpipe() পদ্ধতিটি নির্গত হয় যা পূর্বে এই WriteStream এ পাইপ করা হয়েছিল |
| 'ready' | স্ট্রীম ব্যবহারের জন্য প্রস্তুত হলে মুক্তি |
একটি ফাইলে লেখা
এই উদাহরণটি দেখায় কিভাবে একটি ফাইল WriteStream তৈরি করতে হয় এবং এতে ডেটা লিখতে হয়:
const fs = প্রয়োজন('fs'); const path = require('path'); // আউটপুট ফাইল পাথ সংজ্ঞায়িত করুন const outputFile = path.join(__dirname, 'writestream-example.txt'); // ফাইলে লিখতে একটি WriteStream তৈরি করুন const writeStream = fs.createWriteStream(outputFile, { // বিকল্প পতাকা: 'w', // লেখার জন্য 'w' (বিদ্যমান ফাইল ওভাররাইট করে) এনকোডিং: 'utf8', // স্ট্রিংয়ের জন্য এনকোডিং সেট করুন মোড: 0o666, // ফাইল মোড (অনুমতি) autoClose: true // স্ট্রীম শেষ হলে স্বয়ংক্রিয়ভাবে ফাইল বর্ণনাকারী বন্ধ করুন }); console.log('ফাইল রাইটস্ট্রিম বৈশিষ্ট্য:'); console.log(`- পথ: ${writeStream.path}`); console.log(`- মুলতুবি: ${writeStream.pending}`); console.log(`- হাই ওয়াটার মার্ক: ${writeStream.writableHighWaterMark} বাইট`); // স্ট্রিম ইভেন্টগুলি পরিচালনা করতে writeStream.on('open', (fd) => { console.log(`ফাইল বর্ণনাকারীর সাথে খোলা হয়েছে: ${fd}`); }); writeStream.on('তৈরি', () => { console.log('WriteStream প্রস্তুত'); // স্ট্রীমে ডেটা লিখুন writeStream.write('হ্যালো, এটি প্রথম লাইন।\n'); writeStream.write('এটি দ্বিতীয় লাইন।\n'); writeStream.write('এবং এটি তৃতীয় লাইন।\n'); // সমস্ত ডেটা লেখার পরে স্ট্রিমটি শেষ করুন writeStream.end('এটি শেষ লাইন।\n', () => { console.log('ফাইলটিতে লেখা শেষ'); console.log(`মোট বাইট লেখা: ${writeStream.bytesWritten}`); }); }); // ড্রেন ইভেন্ট পরিচালনা করুন (যখন বাফার খালি থাকে) writeStream.on('ড্রেন', () => { console.log('বাফার ড্রেনড লিখুন'); }); // ফিনিশ ইভেন্ট পরিচালনা করুন (শেষের পরে() এবং সমস্ত ডেটা ফ্লাশ করা হয়েছে) writeStream.on('finish', () => { console.log('সমস্ত লেখা সম্পন্ন হয়েছে'); // যাচাই করতে ফাইলের বিষয়বস্তু আবার পড়ুন fs.readFile(outputFile, 'utf8', (err, data) => { যদি (ভুল) { console.error(`ফাইল পড়ার ত্রুটি: ${err.message}`); প্রত্যাবর্তন } console.log('\nফাইল বিষয়বস্তু:'); console.log('-'.রিপিট(20)); console.log(ডেটা); console.log('-'.রিপিট(20)); // নমুনা ফাইল পরিষ্কার করুন fs.unlink(outputFile, (err) => { যদি (ভুল) { console.error(`ফাইল অপসারণে ত্রুটি: ${err.message}`); প্রত্যাবর্তন } console.log('নমুনা ফাইল সরানো'); }); }); }); writeStream.on('close', () => { console.log('স্ট্রিম বন্ধ'); }); writeStream.on('error', (err) => { console.error(`ত্রুটি: ${err.message}`); });
ব্যাকপ্রেশার হ্যান্ডলিং
এই উদাহরণটি দেখায় কিভাবে ব্যাকপ্রেশার পরিচালনা করতে হয় যখন প্রচুর পরিমাণে ডেটা লেখা হয়:
const fs = প্রয়োজন('fs'); const path = require('path'); // আউটপুট ফাইল পাথ সংজ্ঞায়িত করুন const backpressureFile = path.join(__dirname, 'backpressure-example.txt'); // ব্যাকপ্রেশার প্রদর্শনের জন্য একটি ছোট হাইওয়াটারমার্কের সাথে একটি রাইটস্ট্রিম তৈরি করুন const writeStream = fs.createWriteStream(backpressureFile, { হাইওয়াটারমার্ক: 1024 // 1KB বাফার (ব্যাকপ্রেশার প্রদর্শনের জন্য ছোট) }); // পাল্টা কত খণ্ড লেখা হয়েছে যাক chunksWritten = 0; যাক drainEvents = 0; // ব্যাকপ্রেশার না হওয়া পর্যন্ত ডেটা লেখার ফাংশন ফাংশন writeChunks() { console.log('লেখার খণ্ড...'); // ডেটার একটি বড় অংশ তৈরি করুন const chunk = 'a'.repeat(256); // প্রতি খণ্ডে 256 বাইট // একাধিক খণ্ড লেখার চেষ্টা let canContinue = সত্য; যখন (চালিয়ে যেতে পারেন && খণ্ড লিখিত < 100) { // খণ্ড লেখার চেষ্টা canContinue = writeStream.write(`Chunk ${chunksWritten}: ${chunk}\n`); খণ্ড লিখিত++; যদি (খণ্ড লিখিত % 10 === 0) { console.log(`এখন পর্যন্ত ${chunksWritten} খণ্ড লিখেছেন'); } // চালিয়ে যেতে পারলে মিথ্যা হয়, আমরা ব্যাকপ্রেশার আঘাত করি যদি (!চালিয়ে যেতে পারেন) { console.log(${chunksWritten} খণ্ডের পরে `ব্যাকপ্রেশার আঘাত। নিষ্কাশনের জন্য অপেক্ষা করা হচ্ছে...`); // চালিয়ে যাওয়ার আগে ড্রেন ইভেন্টের জন্য অপেক্ষা করুন writeStream.once('ড্রেন', () => { ড্রেন ইভেন্ট++; console.log(`ড্রেন ইভেন্ট #${drainEvents} ঘটেছে। লেখা আবার শুরু করা হচ্ছে...`); writeChunks(); // লেখা চালিয়ে যান }); } } // যদি সমস্ত অংশ লেখা হয়ে থাকে, তাহলে স্ট্রীম শেষ করুন যদি (খণ্ডগুলি লিখিত >= 100) { writeStream.end('\nসমস্ত খণ্ড লেখা হয়েছে।\n', () => { console.log('সমস্ত খণ্ড লেখার পর WriteStream শেষ হয়েছে'); }); } } // স্ট্রীম প্রস্তুত হলে খণ্ডগুলি লেখা শুরু করুন৷ writeStream.on('তৈরি', () => { console.log('WriteStream highWaterMark =' সহ প্রস্তুত, writeStream.writableHighWaterMark, 'বাইটস'); // খণ্ড লিখতে শুরু করুন writeChunks(); }); // ফিনিশ ইভেন্ট পরিচালনা করতে writeStream.on('finish', () => { console.log('\nরাইট অপারেশন সম্পন্ন হয়েছে'); console.log(`মোট খণ্ড লিখিত: ${chunksWritten}`); console.log(`মোট ড্রেন ইভেন্ট: ${drainEvents}`); console.log(`মোট বাইট লেখা: ${writeStream.bytesWritten}`); // নমুনা ফাইল পরিষ্কার করুন fs.unlink(backpressureFile, (err) => { যদি (ভুল) { console.error(`ফাইল অপসারণে ত্রুটি: ${err.message}`); প্রত্যাবর্তন } console.log('নমুনা ফাইল সরানো'); }); }); // ত্রুটিগুলি পরিচালনা করতে writeStream.on('error', (err) => { console.error(`ত্রুটি: ${err.message}`); });
কর্ক() এবং আনকর্ক() ব্যবহার করা
এই উদাহরণটি দেখায় যে ব্যাচিং কর্ক() এবং আনকর্ক() ব্যবহার করে একসাথে লেখা হয়:
const fs = প্রয়োজন('fs'); const path = require('path'); // আউটপুট ফাইল পাথ সংজ্ঞায়িত করুন const uncorkedFile = path.join(__dirname, 'uncorked-example.txt'); const corkedFile = path.join(__dirname, 'corked-example.txt'); // যে ফাংশনটি প্রমাণ চালায় ফাংশন demonstrateCorkUncork() { console.log('demonstrating cork() এবং uncork() পদ্ধতি'); // 1. কর্কিং ছাড়াই লিখুন const uncorkedStream = fs.createWriteStream(uncorkedFile); uncorkedStream.on('finish', () => { console.log(`আনকর্কড স্ট্রীম শেষ। বাইট লেখা: ${uncorkedStream.bytesWritten}`); // 2. এখন কর্কিং দিয়ে লিখুন const corkedStream = fs.createWriteStream(corkedFile); corkedStream.on('finish', () => { console.log(`কর্কড স্ট্রীম শেষ। বাইট লেখা: ${corkedStream.bytesWritten}`); // ফাইল তুলনা করুন fs.readFile(uncorkedFile, 'utf8', (err, uncorkedData) => { যদি (ভুল) { console.error(`আনকর্কড ফাইল পড়ার ত্রুটি: ${err.message}`); প্রত্যাবর্তন } fs.readFile(corkedFile, 'utf8', (err, corkedData) => { যদি (ভুল) { console.error(`কর্কড ফাইল পড়ার ত্রুটি: ${err.message}`); প্রত্যাবর্তন } console.log('\nফাইল তুলনা:'); console.log(`- Uncorked ফাইলের আকার: ${uncorkedData.length} bytes`); console.log(`- কর্কড ফাইল সাইজ: ${corkedData.length} বাইট'); console.log(`- বিষয়বস্তু অভিন্ন: ${uncorkedData === corkedData}`); // নমুনা ফাইল পরিষ্কার করুন fs.unlinkSync(uncorkedFile); fs.unlinkSync(corkedFile); console.log('নমুনা ফাইল সরানো'); }); }); }); // কর্ক ফাংশন শুরু করুন console.log('কর্ক দিয়ে লেখা()...'); corkedStream.cork(); // ডেটার একাধিক খণ্ড লিখুন জন্য (আলো i = 0; i <1000; i++) { corkedStream.write(`লাইন ${i}: এই ডেটা কর্ক করা হচ্ছে।\n`); } // আনকর্ক টু ফ্লাশ বাফার - বাস্তব অ্যাপ্লিকেশনে, আমরা একসাথে ব্যাচ লেখার জন্য একাধিকবার কর্ক/আনকর্ক করতে পারি। corkedStream.uncork(); // স্ট্রীম শেষ করুন corkedStream.end(); }); // কর্কিং ছাড়াই লিখুন console.log('কর্ক ছাড়া লেখা()...'); জন্য (আলো i = 0; i <1000; i++) { uncorkedStream.write(`লাইন ${i}: এই ডেটা কর্ক করা হচ্ছে না।\n`); } // স্ট্রীম শেষ করুন uncorkedStream.end(); } // প্রমাণ চালান প্রদর্শন করকঅঙ্কর্ক();
স্ট্যান্ডার্ড আউটপুটে লেখা
এই উদাহরণটি দেখায় কিভাবে process.stdout WriteStream ব্যবহার করতে হয়:
// process.stdout হল একটি WriteStream // বেসিক লিখুন stdout process.stdout.write('হ্যালো,'); process.stdout.write('world!\n'); // stdout রং সমর্থন করে কিনা পরীক্ষা করুন (বেশিরভাগ টার্মিনাল করে) const supportsColor = process.stdout.hasColors && process.stdout.hasColors(); // রঙ সমর্থিত হলে সহজ বিন্যাস যদি (রঙ সমর্থন করে) { // রঙের জন্য ANSI এস্কেপ কোড const রং = { লাল: '\x1b[31m', সবুজ: '\x1b[32m', হলুদ: '\x1b[33m', নীল: '\x1b[34m', পুনরায় সেট করুন: '\x1b[0m' }; process.stdout.write(`${colors.red}এই লেখাটি লাল।\n${colors.reset}`); process.stdout.write(`${colors.green}এই লেখাটি সবুজ।\n${colors.reset}`); process.stdout.write(`${colors.blue}এই লেখাটি নীল।\n${colors.reset}`); } অন্য { process.stdout.write('আপনার টার্মিনাল রং সমর্থন করে না।\n'); } // লেখার টেবিল ডেটা কনস্ট টেবিল = [ ['নাম', 'বয়স', 'দেশ'], ['জন', '28', 'USA'], ['মারিয়া', '32', 'স্পেন'], ['ইউকি', '24', 'জাপান'] ]; process.stdout.write('\nটেবিল উদাহরণ:\n'); table.forEach(সারি => { process.stdout.write(`${row[0].padEnd(10)}${row[1].padEnd(5)}${row[2]}\n`); }); // অগ্রগতি বারের উদাহরণ process.stdout.write('\nপ্রগতি দণ্ডের উদাহরণ:\n'); ফাংশন শোপ্রগ্রেস(শতাংশ) { const width = 40; const complete = Math.floor(width* (শতাংশ / 100)); const left = প্রস্থ - সম্পন্ন; // একটি অগ্রগতি বার তৈরি করুন const bar = '[' + '#'.repeat(completed) + ''.repeat(remaining) +']'; // লাইনের শুরুতে ফিরে আসতে \r ব্যবহার করুন process.stdout.write(`\r${bar} ${percent}%`); // সম্ভব হলে, একটি নতুন লাইন যোগ করুন যদি (শতাংশ === 100) { process.stdout.write('\nসম্পূর্ণ!\n'); } } // অগ্রগতি অনুকরণ করুন যাক অগ্রগতি = 0; const progressInterval = setInterval(() => { অগ্রগতি += 10; showProgress(প্রগতি); যদি (প্রগতি >= 100) { clearInterval(progressInterval); } }, 300); // দ্রষ্টব্য: অগ্রগতি বারের উদাহরণটি W3Schools TryIt সম্পাদকের চেয়ে টার্মিনালে বেশি কার্যকর
HTTP WriteStream উদাহরণ
এই উদাহরণটি দেখায় কিভাবে HTTP প্রতিক্রিয়া ডেটা পরিচালনা করতে একটি WriteStream ব্যবহার করতে হয়:
const http = প্রয়োজন('http'); // একটি HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // res হল একটি http.ServerResponse, যা একটি WriteStream console.log(${req.url}`-এর কাছে ${req.method} অনুরোধ গৃহীত হয়েছে); // প্রতিক্রিয়া শিরোনাম সেট করুন res.setHeader('Content-Type', 'text/html'); // ক্লায়েন্ট একটি স্ট্রিমিং প্রতিক্রিয়া অনুরোধ করেছে কিনা তা পরীক্ষা করুন যদি (req.url === '/stream') { // একটি বড় প্রতিক্রিয়া স্ট্রিমিং প্রদর্শন করুন streamLargeresponse(response); } অন্য { // ডিফল্ট হ্যান্ডলার - উদাহরণের লিঙ্ক দেখান res.writeHead(200, {'Content-Type': 'text/html'}); res.end(`
HTTP WriteStream Example
HTTP WriteStream Examples
`); } }); // একটি ফাংশন যা খণ্ডে একটি বড় প্রতিক্রিয়া প্রবাহিত করে ফাংশন streamLargeResponse(res) { // উপযুক্ত হেডার সেট করুন res.writeHead(200, { 'কন্টেন্ট-টাইপ': 'টেক্সট/এইচটিএমএল', 'ট্রান্সফার-এনকোডিং': 'খণ্ডিত' // খণ্ডিত স্থানান্তর এনকোডিং সক্ষম করুন }); // HTML হেডার লিখুন res.write(`
Streaming Response Example
Streaming Response Example
This response is being streamed in chunks with delays between them.
`); // পাঠাতে অংশের সংখ্যা const totalChunks = 10; let sendChunks = 0; // ফাংশন যা একটি খণ্ড পাঠায় ফাংশন sendChunk() { sendChunks++; const now = new Date().toISOSstring(); const খণ্ড = `
Chunk ${sentChunks} of ${totalChunks}
Sent at: ${now}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam vehicula magna eros,
eget gravida dolor fermentum non.
`; // প্রতিক্রিয়ার অংশটি লিখুন res.write(খণ্ড); // যদি সমস্ত অংশ পাঠানো হয়, প্রতিক্রিয়া শেষ করুন যদি (sentChunks >= totalChunks) { // HTML ফুটার লিখুন res.end(`
All chunks have been sent.
`); console.log('সমাপ্ত স্ট্রিমিং প্রতিক্রিয়া'); } অন্য { // অন্যথায়, পরবর্তী খণ্ডটি নির্ধারণ করুন সেটটাইমআউট (সেন্ডচাঙ্ক, 500); // প্রতি 500 মিসে একটি খণ্ড পাঠান } } // খণ্ডগুলি পাঠানো শুরু করুন console.log('স্টার্টিং টু স্ট্রিম রেসপন্স'); sendChunk(); } // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`HTTP WriteStream উদাহরণ সার্ভার http://localhost:${PORT}` এ চলছে); }); // দ্রষ্টব্য: এটিকে কার্যকর দেখতে আপনাকে সার্ভার চালাতে হবে এবং একটি ব্রাউজার খুলতে হবে৷ // http://localhost:8080
WriteStreams এর সাথে সমস্যা হ্যান্ডলিং
এই উদাহরণটি WriteStreams এর সাথে সঠিক ত্রুটি পরিচালনা প্রদর্শন করে:
const fs = প্রয়োজন('fs'); const path = require('path'); // সঠিক ত্রুটি হ্যান্ডলিং সহ একটি ফাইলে একটি লেখার অপারেশন ফাংশন writeWithErrorHandling(filePath, data) { console.log(`এতে লেখার চেষ্টা করা হচ্ছে: ${filePath}`); // WriteStream তৈরি করুন const writeStream = fs.createWriteStream(filePath); // ফলাফল বা ত্রুটি ধরার প্রতিশ্রুতি সেট করুন ফেরত নতুন প্রতিশ্রুতি((সমাধান, প্রত্যাখ্যান) => { // ত্রুটিগুলি পরিচালনা করতে writeStream.on('error', (err) => { console.error(${filePath} এ লেখার ত্রুটি: ${err.message}`); // নিশ্চিত করুন যে স্ট্রিমটি সঠিকভাবে সাফ করা হয়েছে writeStream.destroy(); প্রত্যাখ্যান (ভ্রান্তি); }); // সফল সমাপ্তি পরিচালনা করতে writeStream.on('finish', () => { console.log(`সফলভাবে ${writeStream.bytesWritten} বাইট ${filePath}` এ লিখেছেন); সমাধান(writeStream.bytesWritten); }); // উপাত্ত লিখ writeStream.write(data, (err) => { যদি (ভুল) { console.error(`রাইট অপারেশনের সময় ত্রুটি: ${err.message}`); // এই ক্ষেত্রে 'এরর' ইভেন্টও নির্গত হবে } অন্য { console.log('ডেটা সফলভাবে লেখা হয়েছে, স্ট্রিম শেষ হচ্ছে'); writeStream.end(); } }); }); } // বৈধ এবং অবৈধ ফাইল পাথ দিয়ে পরীক্ষা করুন const validPath = path.join(__dirname, 'valid-path.txt'); const invalidPath = path.join('/', 'অবৈধ', 'পাথ', 'file.txt'); // বেশিরভাগ সিস্টেমে অবৈধ হতে পারে // উদাহরণ 1: একটি বৈধ পথে লেখা console.log('উদাহরণ 1: একটি বৈধ পথে লেখা'); writeWithErrorHandling(validPath, 'এটি ত্রুটি হ্যান্ডলিং উদাহরণের জন্য পরীক্ষার বিষয়বস্তু') তারপর (বাইট লিখিত => { console.log(`যাচাইকৃত: ${bytesWritten} বাইট লেখা`); // পরীক্ষার ফাইলটি পরিষ্কার করুন fs.unlinkSync(validPath); console.log('টেস্ট ফাইল সরানো'); // উদাহরণ 2: একটি অবৈধ পথে লেখা console.log('\nউদাহরণ 2: একটি অবৈধ পথে লেখা'); রিটার্ন writeWithErrorHandling(invalidPath, 'এটি ব্যর্থ হওয়া উচিত'); }) .catch(err => { console.log('প্রোমিস ক্যাচ-এ ত্রুটি ধরা পড়েছে:', err.message); }); // উদাহরণ 3: ধ্বংসপ্রাপ্ত স্ট্রীম প্রমাণ করা console.log('\nউদাহরণ 3: ধ্বংস হওয়া স্ট্রীম প্রদর্শন করা'); ফাংশন demonstrateDestroyedStream() { const DestroyTestFile = path.join(__dirname, 'destroy-test.txt'); const writeStream = fs.createWriteStream(destroyTestFile); writeStream.on('error', (err) => { console.error(`ধ্বংস ত্রুটি: ${err.message}`); }); writeStream.on('close', () => { console.log('নষ্ট প্রবাহ বন্ধ'); // ফাইল তৈরি হলে ক্লিনআপ করুন যদি (fs.existsSync(destroyTestFile)) { fs.unlinkSync(destroyTestFile); console.log('পরীক্ষা ফাইল মুছে ফেলা'); } }); // কিছু তথ্য লিখুন writeStream.write('ধ্বংসের আগে প্রাথমিক তথ্য\n'); // ত্রুটি সহ স্ট্রিম ধ্বংস করুন console.log('ইচ্ছাকৃতভাবে স্ট্রিম ধ্বংস করা'); writeStream.destroy(নতুন ত্রুটি('স্ট্রিম ম্যানুয়ালি ধ্বংস')); // মুছে ফেলার পরে লেখার চেষ্টা করুন (নিঃশব্দে ব্যর্থ হতে হবে) const writeResult = writeStream.write('এটি লেখা উচিত নয়'); console.log(`ধ্বংস ফিরে আসার পর লেখার চেষ্টা: ${writeResult}`); } demonstrateDestroyedStream();
Writestreams এর জন্য সর্বোত্তম অনুশীলন
Node.js WriteStreams , :